import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { RouteRecordRaw, createRouter, createWebHashHistory } from 'vue-router';

// 功能性页面
// RouteRecordRaw 是 Vue Router 提供的一个类型，表示一个标准的路由配置对象。
export const aboutRouter = {
    path: '/about',
    name: 'about',
    component: () => import('@/views/about/index.vue'),
    meta: {},
    children: []
} as RouteRecordRaw;

// vite 官方文档中，写明，import.meta.globEager 是 vite 的语法，引入文件
/**
 * 
import.meta.glob​
原始 import.meta.glob 从 { assert: { type: 'raw' }} 迁移为 { as: 'raw' }

import.meta.glob 的 key 现在是相对于当前模块。

diff
// 文件：/foo/index.js
const modules = import.meta.glob('../foo/*.js')
// 转换为：
const modules = {
-  '../foo/bar.js': () => {}
+  './bar.js': () => {}
}
当在 import.meta.glob 中使用别名（alias）时，键值总是绝对路径。

import.meta.globEager 已经弃用，请使用 import.meta.glob('*', { eager: true }) 来代替。
 */

// 组合路由信息
// import.meta.glob 为 vite 提供的特殊导入方式
// 它可以将模块中全部内容导入并返回一个Record对象
// 默认为懒加载模式 加入配置项 eager 取消懒加载

const modules: Record<string, any> = import.meta.glob('./modules/*.ts', {
    eager: true
});
console.log('modules', modules);

// 遍历modules 拿到所有路由信息 组合成一个数组

const routes: Array<RouteRecordRaw> = [];
Object.keys(modules).forEach((key) => {
    const module = modules[key].default;
    routes.push(module);
});
// 添加about路由
routes.push(aboutRouter);

// 创建路由实例
// hash 路由 模式
// history 路由模式

const router = createRouter({
    history: createWebHashHistory(),
    routes
});
// 路由拦截
const noStatusPage = ['/login', '/about'];
router.beforeEach(async (_to, _from, next) => {
    NProgress.start();
    const token = sessionStorage.getItem('userInfo');
    const userIsLogin = token ? true : false;
    if (userIsLogin || noStatusPage.includes(_to.path)) {
        next();
    } else {
        next('/login');
    }
});
router.afterEach(() => {
    NProgress.done();
});
// 导出路由实例
export default router;
